namespace Fantasy.SourceGenerator.Common
{
    /// <summary>
    /// Source Generator 使用的常量定义
    /// </summary>
    internal static class GeneratorConstants
    {
        /// <summary>
        /// 生成文件的命名空间
        /// </summary>
        public const string GeneratedNamespace = "Fantasy.Generated";

        /// <summary>
        /// 诊断 ID 前缀
        /// </summary>
        public const string DiagnosticIdPrefix = "FANTASY";

        /// <summary>
        /// Entity System 相关接口的完全限定名
        /// </summary>
        public static class EntitySystemInterfaces
        {
            public const string IEntitySystem = "Fantasy.Entitas.Interface.IEntitySystem";
            public const string IAwakeSystem = "Fantasy.Entitas.Interface.IAwakeSystem";
            public const string IUpdateSystem = "Fantasy.Entitas.Interface.IUpdateSystem";
            public const string IDestroySystem = "Fantasy.Entitas.Interface.IDestroySystem";
            public const string IDeserializeSystem = "Fantasy.Entitas.Interface.IDeserializeSystem";
            public const string ILateUpdateSystem = "Fantasy.Entitas.Interface.ILateUpdateSystem";
            public const string ICustomEntitySystem = "Fantasy.Entitas.Interface.ICustomEntitySystem";
        }

        /// <summary>
        /// Event 相关接口的完全限定名
        /// </summary>
        public static class EventInterfaces
        {
            public const string IEvent = "Fantasy.Event.IEvent";
            public const string IAsyncEvent = "Fantasy.Event.IAsyncEvent";
            public const string ISphereEvent = "Fantasy.Event.ISphereEvent";
        }

        /// <summary>
        /// Message 相关接口的完全限定名
        /// </summary>
        public static class MessageInterfaces
        {
            public const string IMessage = "Fantasy.Network.Interface.IMessage";
            public const string IMessageHandler = "Fantasy.Network.Interface.IMessageHandler";
            public const string IRouteMessageHandler = "Fantasy.Network.Interface.IRouteMessageHandler";
            public const string ICustomRoute = "Fantasy.Network.Interface.ICustomRoute";
        }

        /// <summary>
        /// 生成的代码文件注释头
        /// </summary>
        public const string AutoGeneratedHeader = @"//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by Fantasy.SourceGenerator.
//     Runtime Version: 1.0.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

#nullable enable
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
// ReSharper disable MergeIntoPattern
// ReSharper disable SuspiciousTypeConversion.Global
// ReSharper disable NullCoalescingConditionIsAlwaysNotNullAccordingToAPIContract
// ReSharper disable CheckNamespace
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
#pragma warning disable CS8603 // Possible null reference return.
#pragma warning disable CS8602 // Dereference of a possibly null reference.
#pragma warning disable CS8600 // Converting null literal or possible null value to non-nullable type.
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
";
    }
}
